import com.haojin.mybatis.mapper.DynamicSQL;
import com.haojin.mybatis.pojo.Emp;
import com.haojin.mybatis.pojo.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author .29.
 * @create 2023-03-14 9:01
 */
public class testDynamicSQLMapper {
    @Test
    public void testInsertMore(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        DynamicSQL mapper = sqlSession.getMapper(DynamicSQL.class);
        Emp emp1 = new Emp(null,"a",12,"男","123@qq.com");
        Emp emp2 = new Emp(null,"a",12,"男","123@qq.com");
        Emp emp3 = new Emp(null,"a",12,"男","123@qq.com");
        List<Emp> emps = Arrays.asList(emp1, emp2, emp3);
        mapper.insertMoreByList(emps);
    }

    @Test
    public void testDeleteMore(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        DynamicSQL mapper = sqlSession.getMapper(DynamicSQL.class);
        int i = mapper.deleteMoreByArray(new Integer[]{6, 7, 8});
        System.out.println(i);
    }
    /**
     * 动态SQL：
     * 1.if标签：根据标签种test属性所对应的表达式决定标签中的内容是否需要拼接到Sql中
     * 2.where标签：当where标签中有内容时，自动生成where关键字并将内容前多余的and/or去除
     *           当where标签中没有内容时，where标签没有任何效果
     *           注意：where标签无法将内容后多余的and/or去除
     *3.trim标签：prefix:将trim标签中 内容前 添加 指定内容
     *         suffix:将trim标签中 内容后 添加 指定内容
     *         suffixOverrides:将trim标签中 内容后 删除 指定内容
     *         prefixOverrides:将trim标签中 内容前 删除 指定内容
     *         若标签中没有内容时，trim标签没有任何效果
     *4.choose、when、otherwise，相当于 if..else if...else
     *         when至少要有一个，otherwise最多只能有一个
     *5.foreach:
     *          collection:设置需要循环的数组或集合
     *          item:表示数组或集合中的每一个数据
     *          separator:循环体间的分隔符
     *          open:foreach变迁所循环的所有内容的开始符号
     *          close:foreach变迁所循环的所有内容的结束符号
     *6.sql标签
     */
    @Test
    public void getEmpByCondition(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        DynamicSQL mapper = sqlSession.getMapper(DynamicSQL.class);
        List<Emp> list = mapper.getEmpCondition(new Emp(null, "张三", null, "", ""));
        System.out.println(list);
    }

    @Test
    public void getEmpByChoose(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        DynamicSQL mapper = sqlSession.getMapper(DynamicSQL.class);
        List<Emp> list = mapper.getEmpByChoose(new Emp(null, "", null, "", ""));
        System.out.println(list);
    }
}
